package com.hxht.storage.server.pojo;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * 录像检索时，用到的 录像片段信息
 * @author Administrator
 *
 */
@Entity
//@Table(schema="storage")
public class TimePeriodInfo extends BaseEntity{

	@ManyToOne(cascade = CascadeType.PERSIST)
	DayTemplateInfo dayTemplate;
	
	/**
	 *     // 录像类型，当mode为0时可忽略此参数
    // 0-定时录像，1-移动侦测录像，2-报警录像，3-移动侦测或报警录像，4-移动侦测和报警录像，
    // 5-命令触发录像，6-智能报警录像，10-PIR报警，11-无线报警，12-呼救报警，
    // 13-移动侦测、PIR、无线、呼救等所有报警类型的“或”，14-智能交通事件，15-越界侦测，
    // 16-区域入侵，17-声音异常，18-场景变更侦测，
    // 19-智能侦测(越界侦测|区域入侵|进入区域|离开区域|人脸识别)，17-人脸侦测
     *  */
	private Integer type;
	
    private Integer startHour; // 开始时间，小时
	
    private Integer startMinute; // 开始时间，分钟
    
    private Integer stopHour; // 结束时间，小时
    
    private Integer stopMinute; // 结束时间，分钟
	

	public TimePeriodInfo(){}
	
	public DayTemplateInfo getDayTemplate() {
		return dayTemplate;
	}

	public void setDayTemplate(DayTemplateInfo dayTemplate) {
		this.dayTemplate = dayTemplate;
	}
	
	public Integer getStartHour() {
		return startHour;
	}

	public void setStartHour(Integer startHour) {
		this.startHour = startHour;
	}

	public Integer getStartMinute() {
		return startMinute;
	}

	public void setStartMinute(Integer startMinute) {
		this.startMinute = startMinute;
	}

	public Integer getStopHour() {
		return stopHour;
	}

	public void setStopHour(Integer stopHour) {
		this.stopHour = stopHour;
	}

	public Integer getStopMinute() {
		return stopMinute;
	}

	public void setStopMinute(Integer stopMinute) {
		this.stopMinute = stopMinute;
	}

	/** 
	 * 判断时间片段是否有效。<br/>
	 * 判断逻辑：小时 取值范围：0~23，分钟取值范围0~59。并且 开始时间不能大于等于结束时间
	 * @return
	 */
	public boolean isValid(){
		if (0 > startHour  || startHour > 23 || 0 > startMinute  || startMinute > 59)
			return false;
		if (0 > stopHour  || stopHour > 23 || 0 > startMinute  || startMinute > 59)
			return false;
		
		if (stopHour < startHour){
			return false;
		}
		
		if (startHour == stopHour && stopMinute <= startMinute )
			return false;
		
		return true;
	}
	
	/**
	 * 判断两个时间片段是否有重复的部分
	 */
	public boolean isRepeat(TimePeriodInfo other){
		
		if (other == null || !other.isValid())
			return false;
		
		// 如果 other的 开始时间大于或等于 this的结束时间，则没有重复，返回false
		if (other.getStartHour() > stopHour){
			return false;
		} else if (other.getStartHour() == stopHour){
			if (other.getStartMinute() >= stopMinute)
				return false;
		}
		
		// 如果 other的结束时间小于或等于 this的开始时间，则没有重复，返回false
				if (other.getStopHour() < startHour){
					return false;
				} else if (other.getStopHour() == startHour){
					if (other.getStopMinute() <= startMinute)
						return false;
				}
		
		return true;
		
	}

	public Integer getType() {
		return type;
	}

	public void setType(Integer type) {
		this.type = type;
	}
	
}
